--类似开箱子的道具，按怪物的掉落爆出物品

--添加配置
--#include "data/config/item/scriptItemConfig/RollItem.lua" once
--#include "data\config\item\scriptItemConfig\PreUseItemConfig.lua" once

function PreUseItem(sysarg, itemId, itemPtr, ItemTable)
	local cfg = PreUseItemConfig[itemId]
	if cfg then
		if cfg.startDt then
			local nNowDt = System.getCurrMiniTime()
			if nNowDt < cfg.startDt then
				Actor.sendTipmsg(sysarg, Lang.ScriptTips.c000179, ttFlyTip)
				return false
			end
		end
	end
	return true
end

--[[
--按怪物掉落类似的配置Roll一个物品 
--sysarg:实体的指针
--itemidx: 物品的ID
--itemPtr: 物品的指针
--ItemTable: 配置的参数列表，如果单独调用的话，这里是需要背包格子的数量 
--]]
function RollItemFunc(sysarg,itemidx,itemPtr,ItemTable) 
  --获取玩家目前有多少个空格子，如果格子不够，就返回 
  local count = Item.getBagEmptyGridCount(sysarg)
  local needGridCount=1
  if( type( ItemTable ) == 'number' ) then
    needGridCount =    ItemTable
  else
    needGridCount =    ItemTable.needMinBagGrid
  end
  
  
  --判断物品需要消耗的数目
  local nNeedItemCount = ItemTable.itemCount
  if(nNeedItemCount == nil) then 
      nNeedItemCount =1 
  end
  if( Actor.getItemCount(sysarg,itemidx,-1,-1) < nNeedItemCount) then
    local tipMsg = string.format(Lang.ScriptTips.x00140,nNeedItemCount)
    Actor.sendTipmsg( sysarg,tipMsg, ttFlyTip )
	 return false
  end
  
  if needGridCount and count < needGridCount then
    local tipMsg = string.format(Lang.ScriptTips.x00074,needGridCount)
    Actor.sendTipmsg( sysarg,tipMsg,ttFlyTip )
    return false
  end

  if not PreUseItem(sysarg, itemidx,itemPtr,ItemTable) then
	return false
  end
  --需要roll一个物品 
  local dropName = "roll"..tostring(itemidx) --按名字索引的 
  local drop = System.getObjectVar(dropName)
  if (not drop) then
    System.trace("getObjectVar is nil"..itemidx)
		return
  end
  
	local items = drop:drop(sysarg)
	for i = items.itemCount - 1, 0, -1 do
		local result = Actor.canGiveAward(sysarg, 
			items.itemList[i].btAwardType,
			items.itemList[i].wItemId, 
			items.itemList[i].btCount,
			items.itemList[i].btQuality,
			items.itemList[i].btStrong,
			items.itemList[i].btBind,
			true)
		if not result then
			return false
		end
	end
 
  --如果需要删除物品的话就删除 
  if(ItemTable.needDelete)then
    if (nNeedItemCount ~= Actor.removeItem(sysarg,itemidx,nNeedItemCount,-1,-1,-1,"activity",2) ) then     --删除一个物品
	    return false
	end
  end
  
   --遍历掉落列表，并添加玩家的物品 
  
  if ( items.itemCount > 0) then
      local tipMsg = string.format(Lang.ScriptTips.x00208,Actor.getName(sysarg),Item.getItemName(itemidx) ) 
	  for i=0, items.itemCount -1 do
		Actor.giveAward(sysarg,
		items.itemList[i].btAwardType,
		items.itemList[i].wItemId, 
		items.itemList[i].btCount,
		items.itemList[i].btQuality,
        items.itemList[i].btStrong,
        items.itemList[i].btBind,
        items.itemList[i].nTime,
		1,"roll")  
        --if(items.itemList[i].btAuxParam ==1)  then
			local count = items.itemList[i].btCount
			local name = Item.getAwardDesc(items.itemList[i].btAwardType,items.itemList[i].wItemId)
			if(name ~= nil and name ~= "") then
				if(items.itemList[i].btAwardType == 20) then --按经验表里配置经验的
					count = Actor.getActivityExp(sysarg,items.itemList[i].wItemId,items.itemList[i].btCount,items.itemList[i].btQuality)
				end
				--local tipMsg = string.format(Lang.ScriptTips.x00085,Actor.getName(sysarg),Item.getItemName(itemidx),name,count )   --要全服广播
				--System.broadcastTipmsg(tipMsg,ttScreenCenter )
				tipMsg = tipMsg ..string.format("{color;FF00FF00;%s}*%d!",name,count)
			end
       -- end
        
	  end
	  System.broadcastTipmsg(tipMsg,ttScreenCenter )
  end
  
end

function RollItemsInit(sysarg)
  
  for i = 1,table.getn(RollItemConfig) do
    local x = RollItemConfig[i]
    --如果只执行爆率的话，那么就注册调用函数 
    if(x.onlyDoRoll) then
      GlobalItemFn[x.item_id] = { func = RollItemFunc,params =x }
    end 
    --在初始化的时候全部装载进来 ,避免后期临时去加载 
    local dropName = "roll"..tostring(x.item_id)
    local boxdrop = System.getObjectVar(dropName)
    if not boxdrop then
		boxdrop = CBoxDropMgr:getSingleton():createBoxDrop(dropName)  -- 这里会返回一个宝箱掉落对象(CBoxDrop)
	end
	if(boxdrop) then
		boxdrop:load(x.dropName)
	end
  end
end

table.insert(InitFnTable,RollItemsInit)